<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * 포인트 적립을 담당
 */
class Point_model extends CI_Model {

	function __construct() {
		parent::__construct();

		$this->load->library('LogSql');
	}

	/**
	 * 활동 포인트 지급
	 * 사용자ID와 활동내역으로 관련 테이블 모두를 업데이트 한다.
	 */
	function update_activity_point($user_id, $actv_id) {
		log_message('debug', "#### Point_model::update_activity_point($user_id, $actv_id)");
		
		$this->db->trans_start();
		
		$point = $this->get_actv_point($actv_id);
		$this->update_member_point($user_id, $point);
		$this->insert_point_charged_history($user_id, $actv_id, $point, 'B', 0, 0);

		$this->db->trans_complete();

		if ($this->db->trans_status() === FALSE) {
			log_message('error', '## DB업데이트중 에러 발생');
			die('에러 발생');
		}
		return TRUE;
	}

	/**
	 * 활동내용에 해당하는 지급포인트를 가져온다. (보너스포인트)
	 */
	function get_actv_point($actv_id) {
		log_message('debug', "#### Point_model::get_actv_point($actv_id)");
		
		$sql = PHP_EOL." SELECT point FROM tb_activity_to_point WHERE actv_id = ? ";
        $query = $this->db->query($sql, array($actv_id)) or $this->logsql->log_sql('error');
		$result_row = $query->row_array();
		$point = $result_row['point'];

		$this->logsql->log_sql();
		log_message('debug', '## 조회결과 : '.$point);

		return $point;
	}

	/**
	 * 회원 포인트와 캐쉬를 업데이트 한다.
	 */
	function update_member_point($user_id, $point=0, $cash=0) {
		log_message('debug',"#### Point_model::update_member_point($user_id, $point, $cash)");
		
		if ($point == 0 && $cash == 0) {
			log_message('debug','## 보너스포인트 없음');
			return ;
		}
		
		if ($point != 0) {
			$this->db->set('point', 'point+'.$point, FALSE);
		}
		if ($cash != 0) {
			$this->db->set('cash', 'cash+'.$cash, FALSE);
		}
		$this->db->set('update_dt', 'now()', FALSE);
		$this->db->where('user_id', $user_id);
		$this->db->update('tb_point') or $this->logsql->log_sql('error');

		$this->logsql->log_sql();
	}

	/**
	 * 포인트 지급 내역을 저장한다.
	 *  포인트 유효기간과 잔여내역도 같이 저장한다.
	 */
	function insert_point_charged_history($user_id, $actv_id='', $point=0, $point_type, $price=0, $cash=0) {
		log_message('debug',"#### Point_model::insert_point_charged_history($user_id, $actv_id, $point, $point_type, $price, $cash)");
		
		// 유효기간 설정 C=캐쉬 3년, P=포인트 1년
		$term = $point_type == 'C' ? '3' : '1';
		
		$this->db->set('user_id'      , $user_id);
		$this->db->set('point_type'   , $point_type);
		$this->db->set('price'        , $price);
		$this->db->set('cash'         , $cash);
		$this->db->set('point'        , $point);
		$this->db->set('actv_id'      , $actv_id);
		$this->db->set('cash_balance' , $cash);
		$this->db->set('point_balance', $point);
		$this->db->set('start_dt'     , "DATE_FORMAT(CURDATE(),'%Y%m%d')", FALSE);
		$this->db->set('end_dt'       , "DATE_FORMAT(DATE_ADD(CURDATE(), INTERVAL $term YEAR),'%Y%m%d')", FALSE);
		$this->db->set('create_dt'    , 'now()', FALSE);
		$this->db->set('update_dt'    , 'now()', FALSE);
		$this->db->insert('tb_point_charged_history') or $this->logsql->log_sql('error');

		$this->logsql->log_sql();
	}
}

/* End of file point_model.php */
/* Location: ./application/models/point/point_model.php */